package com.itany.nmms.service.impl;

import com.itany.nmms.constant.StatusConstant;
import com.itany.nmms.dao.StaffMapper;
import com.itany.nmms.entity.Staff;
import com.itany.nmms.entity.StaffExample;
import com.itany.nmms.exception.CodeErrorException;
import com.itany.nmms.exception.RequestParameterErrorException;
import com.itany.nmms.exception.StaffNotExistException;
import com.itany.nmms.service.StaffService;
import com.itany.nmms.util.MD5Util;
import com.itany.nmms.util.ParameterUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/3/14 13:59
 * Version:1.0-SNAPSHOT
 */
@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class StaffServiceImpl implements StaffService {

    @Autowired(required = false)
    private StaffMapper staffMapper;

    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
    @Override
    public Staff login(String loginName, String password, String role, String code, String image) throws RequestParameterErrorException, CodeErrorException, StaffNotExistException {
        if(ParameterUtil.isNull(loginName) || ParameterUtil.isNull(password) || ParameterUtil.isNull(role) || ParameterUtil.isNull(code) || ParameterUtil.isNull(image)){
            throw new RequestParameterErrorException("请求参数有误");
        }

        if(!code.equals(image)){
            throw new CodeErrorException("验证码不正确");
        }

        StaffExample example = new StaffExample();
        example.or()
                .andLoginNameEqualTo(loginName)
                .andPasswordEqualTo(MD5Util.md5(password))
                .andRoleEqualTo(role)
                .andIsValidEqualTo(StatusConstant.PRODUCT_TYPE_STATUS_ENABLE);
        List<Staff> staffs = staffMapper.selectByExample(example);
        if(staffs.isEmpty()){
            throw new StaffNotExistException("账号或密码错误");
        }
        return staffs.get(0);
    }

    @Transactional(propagation = Propagation.SUPPORTS,readOnly = true)
    @Override
    public List<Staff> findByParams(Staff staffParam) {
        Staff staff = new Staff();
        staff.setStaffName(ParameterUtil.escapeString(staffParam.getStaffName()));
        staff.setLoginName(ParameterUtil.escapeString(staffParam.getLoginName()));
        staff.setPhone(ParameterUtil.escapeString(staffParam.getPhone()));
        staff.setEmail(ParameterUtil.escapeString(staffParam.getEmail()));
        staff.setDeptId(staffParam.getDeptId());
        staff.setRole(staffParam.getRole());
        staff.setIsValid(staffParam.getIsValid());

        List<Staff> staffs = staffMapper.selectByParams(staff);

        return staffs;
    }
}
